#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/2/22
# @Author: Sunny
# ========================

import time
# 第一题、自定义一个类
# 1、通过上课的相关知识点对这个类创建的对象，进行属性限制，对象只能设置这个三个属性：  title money data
# 2、通过相关机制对设置的属性类型进行限制，title只能设置字符串类型数据
# money设置为int类型数据
# data可以设置为任意类型
# 3、通过相关机制实现，data 属性不能进行删除
# 4、当money设置的值少于0时，确保查询出来的值为0，

# class MyClass:
#     def __setattr__(self, key, value):
#         if key == 'title':
#             if isinstance(value,str):
#                 return super().__setattr__(key,value)
#             else:
#                 raise AttributeError('title属性必须为字符串类型')
#         elif key == 'money':
#             if isinstance(value,int):
#                 if value <0:
#                     return super().__setattr__(key,0)
#                 else:
#                     return super().__setattr__(key,value)
#             else:
#                 raise AttributeError('money属性必须为int类型')
#
#     def __delattr__(self, item):
#         if item == 'data':
#             raise AttributeError('data属性不能被删除')
#         else:
#             return super().__delattr__(item)
#
# m1 = MyClass()
# # m1.title = '123'
# # m1.data = 13
# # del m1.data
# m1.money = 4
# print(m1.money)


# 第二题：
# 有一艘船上有40个人，由于触礁出现了漏水，现在船上最多只能载20个人，需要20个人下船
# 于是这40个人排成一排，根据占位，每个人领取了一个编号，从1开始到40
# 然后从1开始到9进行循环报数，报数为9的人出列下船，一直循环，知道船上只剩下20人。
# 示例：1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  17 18 19 ……40
# 第一次报到9下船的人，编号为9(1,2,3……编号为9的人报9)
# 第二次报到9下船的人，编号为18(10的人报1……编号18的人报9)
# 第二次报到9下船的人，编号为27(19的人报1……编号27的人报9)
# 第四次报到9下船的人，编号为36(28的人报1……编号36的人报9)
# 第五次报到9下船的人，编号为5(37的人报1……编号5的人报9)
# 第六次下船，编号为15
# 请问最后哪些编号的人下了船

new_list=[]
people_list = list(range(1,41))
index = 0
while len(new_list)<21:
    for i in people_list:
        index += 1
        print("当前编号为：{}，报数为:{}".format(i, index))
        if index ==9:
            people_list.remove(i)
            new_list.append(i)
            index=1
            print(f'{i}号人下船了')
print(new_list)




# 三、扩展编程计算题，选做题，不要求提交，某位同学之前遇到的面试题，题意不太好理解，估计出题的那位经常买彩票
# 某彩民购买了一张第99999期体彩超级大乐透彩票，投注方案如下：
# 前区：
# 胆码：01，02，03
# 拖码：08，09，10，11，12，13，14
# 后区：
# 胆码：01
# 拖码：04，05，06，07
# 购买倍数1倍
# 第99999期超级大乐透开奖号码：前区-01，02，08，10，19，后区-03，05
#
#
# 相关名次解释：
# 基本注：前区五个号码+后区两个号码组合成1注，1注2元。
#
#
# 胆码：每注都必须包含的号码，称为胆码
# 拖码：除去胆码外的号码组合由拖码来完成
# 中奖规则：前区猜中M个号码，后区猜中N个号码，下方使用M+N标识中奖条件
# 九等奖-5元：0+2，1+2，2+1，3+0
# 八等奖-15元：2+2，3+1
# 七等奖-100元：4+0
# 六等奖-200元：3+2
# 五等奖-300元：4+1
# 问题:请通过代码计算以下题目的答案：
# 1、该彩民投注方案一共可以拆出多少注超级大乐透？
# 2、该投注方案八等奖中了几注？
# 3、该投注方案中奖金额是多少？
#
# 上面算出来的参考答案
#     1、 84注
#     2、八等奖中奖的注数： 10
#     3、中奖金额为： 950



# 第四题：自定义一个元类
# 可以在创建类的时候，自动给类添加（class_name, create_time）这两个类属性，

# class Meta(type):
#
#     def __new__(cls, *args, **kwargs):
#         for arg in args:
#             if isinstance(arg,dict):
#                 arg.update({'class_name': 'aa'})
#         return type.__new__(cls, *args, **kwargs) #如果__init__里面有参数，则需要加*args, **kwargs，否则可以不加
#
# class Bass(metaclass=Meta):
#
#     class_tt = 'cc'
#     def __init__(self):
#
#         self.bb = 'bb'
#
#
#
# a = Meta('MyClass',(object,),{'age':1})
# print(a)
#





